<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  
  <title>Struts总结 | Hui</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta name="description" content="一、struts的作用二、struts的MVCm(model):facadedaov(view):jspActionForm:承载页面的信息，页面表单域的名称与form的属性必须相等c(control):ActionServlet:接收所有的请求RequestProcessor:是ActionServlet的一个助手，做详细的处理ActionMapping:对应一个action标记，包括url、">
<meta property="og:type" content="article">
<meta property="og:title" content="Struts总结">
<meta property="og:url" content="http://mhuihui.oschina.io/m-pages/2017/01/11/Struts总结/index.html">
<meta property="og:site_name" content="Hui">
<meta property="og:description" content="一、struts的作用二、struts的MVCm(model):facadedaov(view):jspActionForm:承载页面的信息，页面表单域的名称与form的属性必须相等c(control):ActionServlet:接收所有的请求RequestProcessor:是ActionServlet的一个助手，做详细的处理ActionMapping:对应一个action标记，包括url、">
<meta property="og:updated_time" content="2017-02-10T03:36:00.255Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Struts总结">
<meta name="twitter:description" content="一、struts的作用二、struts的MVCm(model):facadedaov(view):jspActionForm:承载页面的信息，页面表单域的名称与form的属性必须相等c(control):ActionServlet:接收所有的请求RequestProcessor:是ActionServlet的一个助手，做详细的处理ActionMapping:对应一个action标记，包括url、">
  
    <link rel="alternate" href="/atom.xml" title="Hui" type="application/atom+xml">
  
  
    <link rel="icon" href="/favicon.png">
  
  
    <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
  
  <link rel="stylesheet" href="/m-pages/css/style.css">
  

</head>

<body>
  <div id="container">
    <div id="wrap">
      <header id="header">
  <div id="banner"></div>
  <div id="header-outer" class="outer">
    <div id="header-title" class="inner">
      <h1 id="logo-wrap">
        <a href="/m-pages/" id="logo">Hui</a>
      </h1>
      
    </div>
    <div id="header-inner" class="inner">
      <nav id="main-nav">
        <a id="main-nav-toggle" class="nav-icon"></a>
        
          <a class="main-nav-link" href="/m-pages/">Home</a>
        
          <a class="main-nav-link" href="/m-pages/archives">Archives</a>
        
      </nav>
      <nav id="sub-nav">
        
          <a id="nav-rss-link" class="nav-icon" href="/atom.xml" title="RSS Feed"></a>
        
        <a id="nav-search-btn" class="nav-icon" title="Search"></a>
      </nav>
      <div id="search-form-wrap">
        <form action="//google.com/search" method="get" accept-charset="UTF-8" class="search-form"><input type="search" name="q" results="0" class="search-form-input" placeholder="Search"><button type="submit" class="search-form-submit">&#xF002;</button><input type="hidden" name="sitesearch" value="http://mhuihui.oschina.io/m-pages"></form>
      </div>
    </div>
  </div>
</header>
      <div class="outer">
        <section id="main"><article id="post-Struts总结" class="article article-type-post" itemscope itemprop="blogPost">
  <div class="article-meta">
    <a href="/m-pages/2017/01/11/Struts总结/" class="article-date">
  <time datetime="2017-01-11T04:15:38.000Z" itemprop="datePublished">2017-01-11</time>
</a>
    
  </div>
  <div class="article-inner">
    
    
      <header class="article-header">
        
  
    <h1 class="article-title" itemprop="name">
      Struts总结
    </h1>
  

      </header>
    
    <div class="article-entry" itemprop="articleBody">
      
        <hr>
<p>一、struts的作用<br>二、struts的MVC<br>m(model):<br>facade<br>dao<br>v(view):<br>jsp<br>ActionForm:承载页面的信息，页面表单域的名称与form的属性必须相等<br>c(control):<br>ActionServlet:接收所有的请求<br>RequestProcessor:是ActionServlet的一个助手，做详细的处理<br>ActionMapping:对应一个action标记，包括url、action、form、actionForward</p>
<p><action path="\login" type="struts.action.InsertAction" name="userForm" scope="request"></action></p>
<p><forward name="success" path="/success.jsp"></forward></p>
<p><forward name="error" path="/error.jsp"><br><br>Action:做具体的业务处理<br>ActionForward:转发到另一个页面<br>三、struts的请求处理过程<br>1、通过url.do在struts-config.xml中找到对应的action及actionForm<br>2、如果有actionForm用已有的，没有产生一新的，通过返射将表单域的值注<br>入到actionForm实例中。<br>3、如果有action用已有的，没有产生一个新的，调用action的execute方法，<br>在调用之前将actionForm注入到execute方法中。<br>4、execute在执行结束前通过actionMapping找到一个ActionForward，转发到下一个页面。</forward></p>
<p>struts与dao hibernate整合简要说明&lt;具体祥见框架&gt;<br>将IFcade作为BaseAction的一个属性，通过FacadeFactory产Facade实例，返回一个IFacade接口。<br>facade<br>IFacade<br>Facade<br>FacadeFactory:<br>产Facade实例，返回一个IFacade接口。<br>dao<br>UserDao接口<br>UserDao实现类<br>UserDaoFactory：产生具体的UserDao实现类，返回一个抽象的接口<br>AbstractFactory:用了单例、返射、工厂，实例化了UserDaoFactory,<br>返回了一个AbstractFactory抽象类。因为UserDaoFactory<br>是AbstractFacatory的子类，所以业务层调用的还是子类的<br>getUserDao方法产生具体的UserDao实现实例，返回UserDao接口。<br>hibernate:持久化</p>
<p>第一章、struts简介<br>一、struts中的MVC<br>M:<br>业务、持久<br>V:<br>jsp<br>ActionForm<br>C:<br>ActionServlet<br>RequestProcessor<br>ActionMapping<br>Action<br>ActionForward<br>作用:使业务层与界面层强制解藕<br>二、处理过程:<br>*.do请求表ActionServlet<br>ActionServlet转发到RequestProcessor<br>RequestProcessor根据url在struts-config.xml中找到ActionForm Action<br>RequestProcessor实例化ActionForm并根据类的返射填充ActionForm<br>RequestProcessor实例化Action并调用Action的execute方法。<br>execute方法执行完后返回一个ActionForward转发到另一个jsp页面。<br>三、struts的特点<br>struts中的Action中一个单例模式(singlton)<br>struts只关心web层的处理，对于业务层及持久层不管。<br>四、model2的体系结构<br>MVC<br>M:javaBean<br>V:jsp<br>C:servlet<br>第二章、控制器组件<br>一、struts中的MVC<br>M:<br>业务、持久<br>V:<br>jsp<br>ActionForm<br>C:<br>ActionServlet<br>RequestProcessor<br>ActionMapping<br>Action<br>ActionForward<br>作用:使业务层与界面层强制解藕<br>二、RequestProcessor的处理过程<br>processPath() 确定选择将要处理的动作的路径<br>processMapping() 为请求选择动作映射</p>
<p><action path="/login" type="struts.action.LoginAction" name="userForm" attribute="userForm" scope="session" input="/login.jsp" validate="true"></action></p>
<p><forward name="success" path="/succ.jsp"></forward></p>
<p><forward name="error" path="/error.jsp"><br><br>processActionForm() 新建一个 Form Bean 或从请求会话中检索 Form Bean<br>processPopulate() 填充与请求关联的 ActionForm<br>processForward() 处理 <action-mapping> 元素的 forward 以匹配当前的请求路径<br>processValidate() 调用 Form Bean 的 validate() 方法<br>processActionCreate() 实例化当前 ActionMapping 指定的类的实例<br>processActionPerform() 将调用 action 的 perform() 或 execute() 方法 processPreprocess() 告诉请求处理器调用此方法后是否应继续处理请求<br>三、数据源连接<br><data-sources><br><data-source key="Sql" type="org.apache.commons.dbcp.BasicDataSource"></data-source></data-sources></action-mapping></forward></p>
<p><set-property property="driverClassName" value="sun.jdbc.odbc.JdbcOdbcDriver"></set-property></p>
<p><set-property property="url" value="jdbc:odbc:accp"></set-property></p>
<p><set-property property="username" value=""></set-property></p>
<p><set-property property="password" value=""><br><br><br>取:<br>ServletContext context = servlet.getServletContext();<br>DataSource dataSource = (DataSource) context.getAttribute(“Sql”);<br>Conneciton con=dataSource.getConnection();<br>第三章、视图组件<br>struts的标签库</set-property></p>
<p><html:select property=""></html:select></p>
<p><html:options collection="集合" property="真实值" labelproperty="显示值"><br></html:options></p>
<p><option value="01">男</option><br>html:因为form的对象可以放到request或session中，当转发到的页面通过html标记直接显示<br>form中的值。<br>1、html:text/html:password<br>2、html:select如果下拉列表的值与集合中的值一样会自动选中</p>
<p><html:select property="sex"></html:select></p>
<p><html:options collections="sexes" property="" labelproperty=""><br>//sexes是在session或request或application中对象<br></html:options></p>
<p><html></html></p>
<p><html:select property=""></html:select></p>
<p><html:options><br></html:options></p>
<p><html:radio></html:radio></p>
<p><html:mulitibox value="" property="字符串数组"><br>1、错误返回的页面可以保留以前的值。<br>2、转发后的form名及范围与前一个form相同，可以直接显示</html:mulitibox></p>
<p><bean></bean></p>
<p><bean:define name="" id="" scope=""><br>从scope中取出name放到变量id中。</bean:define></p>
<p><bean:define id="" scope="" name="" property="属性名"><br>从scope中取出name的property属性放到变量id中。</bean:define></p>
<p><bean:write name="" property=""><br>将对象name的值打印。</bean:write></p>
<p><bean:message key=""><br>通过键名取国际化的值</bean:message></p>
<p><logic></logic></p>
<p><logic:iterator id="" scope="" name=""><br>从scope中取出集合name将其每一个元素放到id中。</logic:iterator></p>
<p><logic:iterator id="" scope="" name="" property=""><br>从scope中取出对象name的property属性值(集合),将其每一个元素放到id中。</logic:iterator></p>
<p><logic:present name="" scope=""><br>在scope中是否存在name对象<br>struts的国际化:不用修改源代码只加入一个properties文件实现国际化<br>一、资源文件:名称<em>语言</em>国家.properties<br>message_en_US.properties<br>message_zh_CN.properties<br>如果有非英语或数字，需将资源文件转码native2ascii -encoding utf-8 源 目<br>二、在struts-config.xml指定资源文件的名称:包名+文件名(struts.message)<br>三、在jsp中通<bean:message key="">通过键名加载相关的消息。<br>struts的校验框架<br>手动:所有校验规则要写代码。<br>1、国际化两步曲<br>2、必须覆盖validate方法<br>public class MyForm extends ActionForm<br>{<br>public ActionErrors validate()<br>{<br>//如果ActionErrors.size()&gt;=1返回到input页面<br>errors.add(ActionErrors.GLOBAL_MESSAGE,new ActionMessage(“userName”));<br>//new ActionMessage(“userName”)是键名，保证消息不为空<br>}<br>}<br>3、修改struts-config.xml文件，加入如下信息</bean:message></logic:present></p>
<p><action attribute="loginForm" input="/login.jsp" name="loginForm" path="/login" scope="request" type="struts.action.LoginAction" validate="true"><br>4、在jsp页面中通过messages标记显示</action></p>
<p><html:messages id="errors"></html:messages></p>
<p></p><p></p>
<p><bean:write name="errors"><br></bean:write></p><br><br>自动:不用写校验代码，通过xml文件说具体的校验规则<br>1、国际化两步曲<br>2、校验通用两步曲<br>a、jsp页面显示错误<br>b、修改action标签加入validate、input属性<br>3、继承于ValidateForm，因不能覆盖validate方法<br>public class MyForm extends ValidateForm<br>{<br>//public ActionErrors validate()<br>//{<br>// 如果ActionErrors.size()&gt;=返回到input页面<br>//}<br>}<br>3、通过配置文件加载两个xml文件<br>a、拷入validation-rules.xml，用的struts1.2的。<br>b、将validataion-rules.xml拷贝一份修改如下:<p></p>
<p><formset></formset></p>
<p><form name="loginForm"></form></p>
<p><field property="userName" depends="required"></field></p>
<p><arg0 key="userName"><br></arg0></p>
<p><field property="pwd" depends="required,minlength"></field></p>
<p><arg0 key="pwd"></arg0></p>
<p><arg1 resource="false" key="${var:minlength}"><br><var><br><var-name>minlength</var-name><br><var-value>6</var-value><br></var><br><br><br><br>c、通过插件加入以上的两个文件</arg1></p>
<p><plug-in classname="org.apache.struts.validator.ValidatorPlugIn"></plug-in></p>
<p><set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"><br></set-property></p>
<p>action的分类:<br>Action只有一个execute方法<br>DispatchAction:可以有多个方法<br>public 类 extends DispatchAction<br>{<br>public void add()<br>{}<br>}</p>
<p><action attribute="loginForm" input="/login.jsp" name="loginForm" path="/login" scope="request" validate="true" type="struts.action.LoginAction" parameter="表单域名"><br>tiles:可以定义jsp页面的布局<br>tiles的使用:将由多个页面组成的主页面整体布局，是通过<br>tiles的一个xml文件来说明，如果页面的结构或具体内容<br>发生了改变，只需修改tiles.xml文件，不用改具体的页面代码<br>如<jsp:include>。<br>–做一个action，其转发的结果tiles中的index</jsp:include></action></p>
<p>&lt;action path=”index” type=”struts.action.IndexAction”</p>
<p><forward name="success" path="index"><br><br>–通过tiles中的index转发到了main.jsp页面</forward></p>
<p><tiles-definitions></tiles-definitions></p>
<p><definition name="index" path="/main.jsp"></definition></p>
<p><put name="head" value="/head.jsp"></put></p>
<p><put name="foot" value="/foot.jsp"></put></p>
<p><put name="body" value="/body.jsp"><br><br><br>–main.jsp页面</put></p>
<p><tiles:insert attribute="head"></tiles:insert></p>
<p><tiles:insert attribute="body"></tiles:insert></p>
<tiles:insert attribute="foot">



<p>一、struts的MVC<br>M:model<br>V:view<br>jsp<br>ActionForm<br>C:control<br>ActionServlet:接收所有以.*结尾的请求<br>RequestProcessor:是ActionServlet的一个助手，做具体的处理。<br>ActionMapping:一个action标签，通过它可以找到Action、ActionForm<br>ActionForward。</p>
<p><action type="struts.action.LoginAction" name="loginForm" attribute="loginForm" 在request或session中的键名="" scope="request/session" input="/login.jsp" 在校验框架中有错误转发到input对应的页面="" validate="true" 告诉struts当前的form需要校验=""></action></p>
<p><forward name="success" path="/success.jsp"><br><br>Action:做具体的业务处理<br>ActionForward:转发一另一个页面。<br>二、struts的请求处理过程<br>1、通过url.do在struts-config.xml中找到对应的action及ActionForm<br>2、如果有ActionForm用已有的，没有产生一个新的实例，并通过返射将表<br>单域的值填充到ActionForm中。<br>3、如果有Action用已有的，没有产生一个新的，调用Action的execute方法<br>在调用execute方法之前通过参数将ActionForm注入到execute方法中。<br>4、execute方法执行结束前，通过ActionMapping找到一个ActionForward<br>转发到下一个jsp页面。<br>三、struts的标签库<br>html:前一个action转发下一个jsp页面，该jsp页面可以重用<br>上一个action所用的form,通过html标签可以直接显示form中的值。<br>FindAction:<br>public ActionForward execute()<br>{<br>UserForm uf=(UserForm)form;<br>mapping.findForward(“updateJsp”);<br>}<br>update.jsp页面:</forward></p>
<p><action path="/update" scope="request" name="userForm" attribute="userForm" type="struts.action.UpdateAction"></action></p>
<p><html:form action="/update"></html:form></p>
<p><html:text property="userName"><br></html:text></p>
<p><html:select property="sex"></html:select></p>
<p><html:collection collection="users" property="code" labelproperty="name"><br><br>bean:对已有bean的操作<br><!--从scope中取出user的userName属性打印--></html:collection></p>
<p><bean:write scope="request/application/session" name="user" property="userName"><br><!--从scope中取出customer对象，放作用域对象page中,键名还是customer1--></bean:write></p>
<p><bean:define scope="request/session/application" name="customer" id="customer1"><br><!--从scope中取出customer对象的buies属性，放作用域对象page中,键名还是buies--></bean:define></p>
<p><bean:define scope="request/session/application" name="customer" property="buies" id="buies"><br>logic:<br><!--如果在scope中有customer，执行标签内的代码--></bean:define></p>
<p><logic:present scope="request/session/appliation" name="customer"><br>执行部分<br></logic:present><br><!--如果在scope中没有customer，执行标签内的代码--></p>
<p><logic:notpresent scope="request/session/appliation" name="customer"><br></logic:notpresent><br><!--取集合中值--><br><!--从request中取出customer对象的buies属性遍历，每个元素通过buy引用--></p>
<p><logic:iterator scope="request" name="customer" property="buies" id="buy"><br></logic:iterator><br>tiles:</p>
<p><tiles:insert attribute="从页面在tiles-defs.xml中定义的名称"><br>四、struts的国际化<br>1、作用:不用改源代码，只需加入一个properties文件，就可以适应不同国家的语言。<br>2、实现步骤:<br>1、加入properties文件<br>a、命名格式<br>文件<em>语言</em>国家.properties<br>b、如果有非英文或数字转码<br>native2ascII -encoding utf-8 源 目标<br>2、在struts-config.xml中说明properties文件所在的位置</tiles:insert></p>
<p><message resource="struts.message"><br>3、在jsp中用标签通过键名取properties文件中的值</message></p>
<p><bean:message name="userName"><br>五、struts的手动校验:手动写代码实现校验规则。<br>1、国际化三步曲<br>2、校验通用两步曲<br>1、修改struts-config.xml中的action标签,加入<br>input及validate=”true”属性<br>2、在jsp页面中显示错误消息</bean:message></p>
<p><html:messages id="error"><br><br><brean:write name="error"><br></brean:write></html:messages><br>2、实现ActionForm<br>public class MyForm extends ActionForm<br>{<br>public ActionErrors validate()<br>{<br>ActionErrors ae=new ActionErrors();<br>ae.add(ActionErrors.glbal_message,new ActionMessage(“资源文件的键名”));<br>如果ae.size&gt;=1返回到input页面<br>如果ae.size&lt;1调用action的execute方法<br>}<br>}<br>六、struts的自动校验:通过xml文件配置具体的校验规则。<br>1、国际化三步曲<br>2、通用校验两步曲<br>3、实现ActionForm，继承于ValidateForm，不能覆盖validate方法<br>public class MyForm extends ActionForm<br>{<br>//public ActionErrors validate()<br>//<br>}<br>4、通过xml说明实现自动校验<br>1、拷入validation-rules.xml到/webrooe/WEB-INF目录下<br>2、复制validation-rules.xml得到的文件是validation.xml,修改结果如下</p>
<p><formset></formset></p>
<p><form name="loginForm"></form></p>
<p><field name="userName" depends="required"></field></p>
<p><arg0 key="userName"><br></arg0></p>
<p><field name="pwd" depends="required,minlength"></field></p>
<p><arg0 key="userName"></arg0></p>
<p><arg1 key="${var:minlength}" resource="false"><br><var><br><var-name>minlength</var-name><br><var-value>6</var-value><br></var><br><br></arg1></p>
<p><formset><br>当发生required错误时，在资源文件中对应的键名errors.required<br>errors.required={0} is not Empty<br>当发生minlength错误时，在资源文件中对应的键名errors.minlength<br>errors.minlength={0} ‘s minlength must be {1}<br>3、通过struts-config.xml的插件加入两个校验文件。<br>七、struts的tiles<br>作用:主页面加载从页面，具体的从页面不是在主页面中确定，而是<br>在tiles-defs.xml中定义，这样如果主页面的结构发生了改变，<br>只需的修改tiles-defs.xml文件，不用修改主页面本身。<br>实现思路:<br>1、在tiles-defs.xml中说明主页面、从页面的名称及uri。<br>2、action的execute方法执行结束时转发到tiles-defs中的一个<br>tiles, 通过该tiles找到主页面，主页面根据tiles中定<br>义的具体页面名称加载对应的jsp页面。<br>实现:<br>1、在tiles-defs.xml中说明主页面及其需要的从页面，具体如下:</formset></p>
<p><definition name="index" path="/index.jsp"></definition></p>
<p><put name="head" value="/head.jsp"></put></p>
<p><put name="body" value="/body.jsp"></put></p>
<p><put name="foot" value="/foot.jsp"><br><br>2、实现action，其forward指定不再是jsp页面，而是一个tiles<br>记住不能加”/“，直接给名称<br>3、在主页中通过名称找到具体的从页面</put></p>
<tiles:insert attribute="head">

<p>十七、struts的MVC<br>m:model<br>facade<br>dao<br>hibernate<br>v:<br>jsp<br>ActionForm<br>c:<br>ActionServlet:接收所有的请求进行处理<br>ActionMapping:是一个具体的action标签,<br>通过url找到action及actionForm<br>可以通过名称找到ActionForward转发到下一个页面。</p>
<p><action path="/login" type="struts.action.LoginAction" name="userForm" attribute="userForm" scope="request" validate="true" input="/login.jsp"></action></p>
<p><actionforward name="success" path="/success.jsp"><br><br>Action:做具体的业务处理<br>ActionForward:转发到另一个页面。<br>十八、struts的请求处理过程:<br>通过url.do在struts-config.xml中找到对应的action及ActionForm<br>如果有actionForm用已有没有产生一个新的，并通过反射将表单域<br>的值注入到actionForm实例中。<br>如果有action用已有的没有产生一个新的，调用action的execute方法，<br>在调用execute方法之前通过参数将ActionForm注入到execute方法，<br>execute 在执行结束前通过ActionMapping找到一个ActionForward转发<br>到下一个页面。</actionforward></p>
</tiles:insert></tiles:insert>
      
    </div>
    <footer class="article-footer">
      <a data-url="http://mhuihui.oschina.io/m-pages/m-pages/2017/01/11/Struts总结/" data-id="ciyzazas1000is8vgoq90amo8" class="article-share-link">Share</a>
      
      
  <ul class="article-tag-list"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/m-pages/tags/编程/">编程</a></li></ul>

    </footer>
  </div>
  
    
<nav id="article-nav">
  
    <a href="/m-pages/2017/01/12/golang环境搭建/" id="article-nav-newer" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Newer</strong>
      <div class="article-nav-title">
        
          go语言学习笔记（一）
        
      </div>
    </a>
  
  
    <a href="/m-pages/2017/01/11/JAVA集合工具类详解/" id="article-nav-older" class="article-nav-link-wrap">
      <strong class="article-nav-caption">Older</strong>
      <div class="article-nav-title">JAVA集合工具类详解</div>
    </a>
  
</nav>

  
</article>

</section>
        
          <aside id="sidebar">
  
    

  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tags</h3>
    <div class="widget">
      <ul class="tag-list"><li class="tag-list-item"><a class="tag-list-link" href="/m-pages/tags/ide/">ide</a></li><li class="tag-list-item"><a class="tag-list-link" href="/m-pages/tags/linux/">linux</a></li><li class="tag-list-item"><a class="tag-list-link" href="/m-pages/tags/编程/">编程</a></li><li class="tag-list-item"><a class="tag-list-link" href="/m-pages/tags/设计/">设计</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Tag Cloud</h3>
    <div class="widget tagcloud">
      <a href="/m-pages/tags/ide/" style="font-size: 13.33px;">ide</a> <a href="/m-pages/tags/linux/" style="font-size: 16.67px;">linux</a> <a href="/m-pages/tags/编程/" style="font-size: 20px;">编程</a> <a href="/m-pages/tags/设计/" style="font-size: 10px;">设计</a>
    </div>
  </div>

  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Archives</h3>
    <div class="widget">
      <ul class="archive-list"><li class="archive-list-item"><a class="archive-list-link" href="/m-pages/archives/2017/02/">February 2017</a></li><li class="archive-list-item"><a class="archive-list-link" href="/m-pages/archives/2017/01/">January 2017</a></li><li class="archive-list-item"><a class="archive-list-link" href="/m-pages/archives/2016/12/">December 2016</a></li></ul>
    </div>
  </div>


  
    
  <div class="widget-wrap">
    <h3 class="widget-title">Recent Posts</h3>
    <div class="widget">
      <ul>
        
          <li>
            <a href="/m-pages/2017/02/10/go语言学习笔记（四)/">go语言学习笔记（四）</a>
          </li>
        
          <li>
            <a href="/m-pages/2017/02/10/hello-world/">Hello World</a>
          </li>
        
          <li>
            <a href="/m-pages/2017/01/14/go语言学习笔记（三）/">go语言学习笔记（三）</a>
          </li>
        
          <li>
            <a href="/m-pages/2017/01/13/go语言学习笔记（二）/">go语言学习笔记（二）结构体和切片</a>
          </li>
        
          <li>
            <a href="/m-pages/2017/01/12/go语言学习笔记（一）/">go语言开发环境搭建</a>
          </li>
        
      </ul>
    </div>
  </div>

  
</aside>
        
      </div>
      <footer id="footer">
  
  <div class="outer">
    <div id="footer-info" class="inner">
      &copy; 2017 hui<br>
      Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>
    </div>
    <nav id="mobile-nav">
  
    <a href="/m-pages/" class="mobile-nav-link">Home</a>
  
    <a href="/m-pages/archives" class="mobile-nav-link">Archives</a>
  
</nav>
    

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>


  <link rel="stylesheet" href="/m-pages/fancybox/jquery.fancybox.css">
  <script src="/m-pages/fancybox/jquery.fancybox.pack.js"></script>


<script src="/m-pages/js/script.js"></script>

  </div>
</body>
</html>